package com.cskaoyan.javase.oop2._1extends._10final._3variable._3static;

/**
 * final修饰静态成员变量,是一个真正意义上的常量,属于类,全局唯一,且取值不可变
 * 所以final修饰静态成员变量,也叫做"全局常量"
 * 语法:
 * [访问权限修饰符] static 数据类型 常量名;
 * 直接在类体中写上述语法,会报错,说明:
 * 全局常量没有默认初始化,它的取值必须在类加载过程中完成,依赖:
 *      1.显式赋值
 *      2.静态代码块
 * 以上赋值方式必须选择其一, 而且只能选择其一.
 *
 * 注意事项:
 *  1.实际开发中,全局常量很常见,因为它是一个真正意义上的常量.
 *      而且它的访问权限修饰符一般都是public
 *      它的访问使用类名点即可
 *
 *  2.public static final 修饰符的位置是可以改变的
 *
 *  3.如果使用静态代码测试类加载，那么访问类的全局常量，有些场景是不会触发类加载的。
 *  （感兴趣自己测试一下，作为锻炼动手能力的小demo）
 *
 * @since 11:30
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // Person.NATIONALITY = "法国";
        System.out.println(Person.NATIONALITY);
    }
}

class Person {
    public static final String NATIONALITY = "中国";

    static {
        // NATIONALITY = "美国";
        System.out.println("hello world!");
    }
}